﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AvaliacaoOnline.Model;

namespace Avaliacao.Controllers
{
    public class RelatorioController : BaseController
    {
        //
        // GET: /Relatorio/

        public ActionResult RespostasPorAvaliacao(int idAvaliacao)
        {

            if (Session["IdUsuario"] == null)
            {
                Response.Redirect(@"~\" + this.Cliente + @"\acesso"); return View();
            }

            AvaliacaoRepository repository = new AvaliacaoRepository();

            if (Session["TipoUsuario"].ToString() == "G")
            {
                AvaliacaoOnline.Data.Avaliacao avaliacao = repository.GetAvaliacao(idAvaliacao);
                ViewData["CustomCSS"] = Url.Content("~" + UploadService.GetFileURL(@"/", avaliacao.ArquivoEstilo, avaliacao.IdCliente, avaliacao.Id));
                ViewData["CustomCSS"] = ViewData["CustomCSS"].ToString().EndsWith("/") ? "" : ViewData["CustomCSS"];
                ViewData["CustomBackground"] = Url.Content("~" + UploadService.GetFileURL(@"/", avaliacao.ImagemFundo, avaliacao.IdCliente, avaliacao.Id));
                ViewData["CustomBackground"] = ViewData["CustomBackground"].ToString().EndsWith("/") ? "" : ViewData["CustomBackground"];

                ViewData["NomeGestor"] = new UsuarioRepository().GetUsuario(Convert.ToInt32(Session["IdUsuario"])).Nome;
            }


            var questoes = repository.GetQuestoes(idAvaliacao);
            ViewData["Questoes"] = questoes;
            var usuarios = new RelatorioService().RespostasPorAvaliacao(idAvaliacao).Where(c => c.Tipo == "U").ToList();

            int qtdeTotalQuestoesValidas = questoes.Count;
            if (!String.IsNullOrWhiteSpace(questoes.First().Avaliacao.EsquemaQuestoes))
            {
                qtdeTotalQuestoesValidas = 0;
                foreach (string s in questoes.First().Avaliacao.EsquemaQuestoes.Split('/'))
                {
                    qtdeTotalQuestoesValidas += int.Parse(s.Split('x')[0]);
                }
            }

            //Seleciona as questoes que apareceram para o usuario a fim de identificar as nao respondidas
            Dictionary<System.Int32, List<AvaliacaoOnline.Data.Questao>> questoesPorUsuario = new Dictionary<int, List<AvaliacaoOnline.Data.Questao>>();
            foreach (int idUsuario in usuarios.Select(c => c.Id).ToArray())
            {
                List<AvaliacaoOnline.Data.Questao> lstUsuarios = new List<AvaliacaoOnline.Data.Questao>();
                if (usuarios.Where(c => c.Id == idUsuario).First().AvaliacoesUsuario.First().Respostas.Count != qtdeTotalQuestoesValidas)
                {
                    lstUsuarios.AddRange(new AvaliacaoRepository().GetQuestoes(idUsuario, idAvaliacao));
                }
                questoesPorUsuario.Add(idUsuario, lstUsuarios);

            }
            ViewData["QuestoesPorUsuario"] = questoesPorUsuario;

            ViewData["TotalQuestoesValidas"] = qtdeTotalQuestoesValidas;
            ViewData["NomeAvaliacao"] = questoes.First().Avaliacao.Titulo;
            ViewData["IdAvaliacao"] = idAvaliacao;

            return View(usuarios);
        }

        public ActionResult Desempenho(int idAvaliacao, int? idUsuario)
        {

            //if (Session["IdUsuario"] == null)
            //{
            //    Response.Redirect(@"~\" + this.Cliente + @"\acesso"); return View();
            //}

            if (!idUsuario.HasValue)
                idUsuario = Convert.ToInt32(Session["IdUsuario"]);


            if (Session["TipoUsuario"] != null && Session["TipoUsuario"].ToString() == "G")
            {
                AvaliacaoOnline.Data.Avaliacao avaliacao = new AvaliacaoRepository().GetAvaliacao(idAvaliacao);
                ViewData["CustomCSS"] = Url.Content("~" + UploadService.GetFileURL(@"/", avaliacao.ArquivoEstilo, avaliacao.IdCliente, avaliacao.Id));
                ViewData["CustomCSS"] = ViewData["CustomCSS"].ToString().EndsWith("/") ? "" : ViewData["CustomCSS"];
                ViewData["CustomBackground"] = Url.Content("~" + UploadService.GetFileURL(@"/", avaliacao.ImagemFundo, avaliacao.IdCliente, avaliacao.Id));
                ViewData["CustomBackground"] = ViewData["CustomBackground"].ToString().EndsWith("/") ? "" : ViewData["CustomBackground"];

                ViewData["NomeGestor"] = new UsuarioRepository().GetUsuario(Convert.ToInt32(Session["IdUsuario"])).Nome;
            }

            ViewData["NomeUsuario"] = new UsuarioRepository().GetUsuario(idUsuario.Value).Nome;

            var questoes = new AvaliacaoRepository().GetQuestoes(idUsuario.Value, idAvaliacao);

            var respostas = new RelatorioService().RespostasPorAvaliacaoEUsuario(idAvaliacao, idUsuario.Value);
            ViewData["PossuiRespostas"] = respostas == null || respostas.Count == 0;
            ViewData["Respostas"] = respostas;

            return View(questoes);
        }
    }
}
